import { defineStore } from 'pinia'
import { ref } from 'vue'

export const useAuthStore = defineStore('auth', () => {
	// 登录过期弹窗状态
	const loginExpiredModalVisible = ref(false)
	const redirectUrl = ref('')
	const lastCheckTime = ref(0) // 添加最后检查时间，防止频繁检查

	/**
	 * 显示登录过期弹窗（防重复）
	 */
	const showLoginExpiredModal = (url?: string) => {
		// 如果弹窗已经显示，不重复显示
		if (loginExpiredModalVisible.value) {
			return
		}
		
		// 防止频繁显示（2秒内只显示一次）
		const now = Date.now()
		if (now - lastCheckTime.value < 2000) {
			return
		}
		lastCheckTime.value = now
		
		// 检查用户是否已经登录，避免在登录成功后误显示弹窗
		import('@/stores/useLoginUserStore').then(({ useLoginUserStore }) => {
			const loginUserStore = useLoginUserStore()
			const currentUser = loginUserStore.loginUser
			
			// 如果用户已经登录，不显示弹窗
			if (currentUser?.id && currentUser.userName !== '未登录') {
				console.log('用户已登录，跳过显示登录过期弹窗')
				return
			}
			
			// 清除用户登录状态
			loginUserStore.clearLoginUser()
			
			// 显示弹窗
			redirectUrl.value = cleanRedirectUrl(url || window.location.pathname + window.location.search + window.location.hash)
			loginExpiredModalVisible.value = true
		}).catch(console.error)
	}

	/**
	 * 隐藏登录过期弹窗
	 */
	const hideLoginExpiredModal = () => {
		loginExpiredModalVisible.value = false
		redirectUrl.value = ''
	}

	/**
	 * 清理重定向URL中的重复部分
	 */
	const cleanRedirectUrl = (url: string): string => {
		if (!url) return '/'
		
		// 如果是完整URL，提取路径部分
		if (url.startsWith('http://') || url.startsWith('https://')) {
			try {
				const urlObj = new URL(url)
				return urlObj.pathname + urlObj.search + urlObj.hash
			} catch {
				return '/'
			}
		}
		
		// 如果已经是路径，直接返回
		return url.startsWith('/') ? url : '/' + url
	}

	return {
		loginExpiredModalVisible,
		redirectUrl,
		showLoginExpiredModal,
		hideLoginExpiredModal,
		cleanRedirectUrl,
	}
})
